package com.infore.dataStatistics.main.cal;

import com.infore.common.base.Msg;
import com.infore.dataStatistics.main.dto.StatTask;

import java.util.List;
import java.util.Map;

public interface Calculator {

    /**
     * 处理计算任务
     * @param chain 责任链
     * @return
     */
    public Msg<Object> deal(Chain chain);

    /**
     * 责任链
     */
    interface Chain {

        /**
         * 获取当前任务
         * @return 统计任务
         */
        StatTask getTask();

        /**
         * 转发任务
         * @param task 统计任务
         * @return 执行结果
         */
        Msg<Object> proceed(StatTask task);
    }

    interface Cal {

        /**
         * 取数据
         * @param task 统计任务
         * @return 待统计数据
         */
        List<Map<String, Object>> getDataList(StatTask task);

        /**
         * 计算
         * @param dataList 待统计数据
         * @param task 统计任务
         * @return 统计结果
         */
        List<Map<String, Object>> calculation(List<Map<String, Object>> dataList, StatTask task);

        /**
         * 更新标识
         * @param dataList 待统计数据
         * @param task 统计任务
         * @return 更新数据数量
         */
        int updateFlag(List<Map<String, Object>> dataList, StatTask task);

        /**
         * 存数据
         * @param dataList 统计结果
         * @param task 统计任务
         * @return 更新或保存数据量
         */
        int saveDataList(List<Map<String, Object>> dataList, StatTask task);
    }

}
